import {createStore} from 'vuex'
//都没有this Pinia
const store=createStore({
    // mapState(['num'])
    /// $store.state.num
    state(){
        return {
            ///全局数据存储的地方
            num:1
        }
    },
    // mapGetters(['num']) 返回的是一个对象
    //$store.getters.isOdd
    getters:{
        isOdd(state){//同步代码
           return state.num%2==0?"偶数":"奇数"
        }
    },
    // mapMutations(['add']) 返回的是一个对象
    //mutations函数需要用store.commit('名称',参数)提交
    mutations:{//它是唯一可以修改state数据的函数 mutations函数必须是同步代码
        add(state,payload){//参数 state数据对象  payload载荷 就是调用mutations函数时的参数
            state.num+=parseInt(payload);
        }
    },
    //mapActions(["asyncAdd"])
    //actions在组件里面通过 store.dispatch('名称',参数)执行
    actions:{//actions里面的函数是进行异步操作的函数，但是他们不能直接修改state数据.必须调用 mutations函数修改state
        //参数context是$store对象 可以调用 context.commit()//来执行mutations
        //参数payload是在组件里面调用actions函数的时候传入的参数
        asyncAdd(context,payload){
            new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    context.commit("add",payload);//触发 mutations函数并传参
                    resolve();
                },5000)
            });
        }
    }
});
export default store;